package com.lx.config;

import com.lx.service.IWeixinApiService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

@Slf4j
@Configuration
public class Retrofit2Config {

    private static final String BASE_URL = "https://api.weixin.qq.com/";

    @Bean
    public Retrofit retrofit() {
        return new Retrofit.Builder()
                .baseUrl(BASE_URL)
                // 使用 RxJava2 的适配器（适配器主要用于将 Retrofit 的同步 API 调用转换为异步调用，或者将响应转换为不同的观察者模式，如 RxJava 的 Observable、Single 或 Kotlin Coroutines。）
                //常见的适配器：
                //RxJava2CallAdapterFactory：将 Retrofit 的调用转换为 RxJava 的 Observable 或 Single。
                //CoroutineCallAdapterFactory：将 Retrofit 的调用转换为 Kotlin Coroutines 的挂起函数。
                //.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

                // 使用 Jackson 转换器（转换器负责将 API 的请求和响应数据转换成 Java 对象，或者将 Java 对象转换成适合发送给服务器的格式（通常是 JSON 或 XML）。
                // 常见的转换器：
                //GsonConverterFactory：使用 Google 的 Gson 库来处理 JSON 数据。
                //JacksonConverterFactory：使用 Jackson 库来处理 JSON 数据。
                //SimpleXmlConverterFactory：使用 Simple XML 框架来处理 XML 数据。）
                .addConverterFactory(JacksonConverterFactory.create())
                .build();
    }

    @Bean
    public IWeixinApiService weixinApiService(Retrofit retrofit) {
        return retrofit.create(IWeixinApiService.class);
    }

}

